package com.kamistoat.meimeistore.cart.service;

import com.kamistoat.meimeistore.cart.vo.CartItemVo;
import com.kamistoat.meimeistore.cart.vo.CartVo;
import org.springframework.data.redis.core.BoundHashOperations;

import java.util.List;

public interface CartService {
    /**
     * 向购物城中添加商品
     *
     * @param skuId
     * @param num
     * @return
     */
    CartItemVo addToCart(Long skuId, Integer num, Boolean hasStock);

    /**
     * 查询刚刚成功添加的商品
     *
     * @param skuId
     * @param num
     * @return
     */
    CartItemVo getCartItem(Long skuId, Integer num);

    /**
     * 获得购物车全部内容
     *
     * @return
     */
    CartVo getCart();

    /**
     * 用于获取指定的cartKey购物车下的所有购物商品列表
     *
     * @param cartKey 购物车的key
     * @return 购物车商品列表
     */
    List<CartItemVo> getCartItemVoList(String cartKey);

    /**
     * 用于删除指定的cartKey购物车下的所有购物商品列表
     *
     * @param cartKey 购物车的key
     */
    void clearCart(String cartKey);

    /**
     * 根据是否登录，绑定离线购物车/在线购物车
     * 在addToCart()方法中被调用
     *
     * @return 对redis中指定哈希表绑定的redis操作类
     */
    BoundHashOperations<String, Object, Object> getCartKeyRedis();

    /**
     * 勾选购物车商品向
     *
     * @param skuId
     * @param check
     */
    void checkItem(Long skuId, Integer check);

    /**
     * 修改购物商品项数量
     *
     * @param skuId
     * @param num
     */
    void countItem(Long skuId, Integer num);

    /**
     * 删除某个商品项
     *
     * @param skuId
     */
    void deleteItem(Long skuId);

    /**
     * 获取当前用户购物车中所有被选中的商品
     * 并不需要传入用户Id，因为购物车服务同样有拦截器的ThreadLocal，直接从里面那就可以了
     */
    List<CartItemVo> getOrderCartChecked();
}
